package de.haw.ai3.bs.aufgabe3.a2.table;

import de.haw.ai3.bs.aufgabe3.a2.Agent;
import de.haw.ai3.bs.aufgabe3.a2.Smoker;
import de.haw.ai3.bs.aufgabe3.a2.Zutat;


public class SynchronizedTable extends Table {

	@Override
	public synchronized void platzieren(Zutat[] zutaten, Agent agent)
			throws InterruptedException {
		while (isFull()) {
			wait();
		}

		this.zutat1 = zutaten[0];
		this.zutat2 = zutaten[1];
		System.err.println(String.format(
				"\t\t\t%s der Agent legt [%s / %s] auf den Tisch", agent,
				zutat1, zutat2));

		notifyAll();
	}

	@Override
	public synchronized Zutat[] nehmen(Smoker smoker)
			throws InterruptedException {
		while (isEmpty() || doesntMatch(smoker)) { // es liegt nichts auf
													// dem Tisch oder die
													// Zutaten passen nicht
			wait();
		}

		Zutat[] zutaten = new Zutat[] { Zutat.valueOf(zutat1.name()),
				Zutat.valueOf(zutat2.name()) };
		this.zutat1 = null;
		this.zutat2 = null;
		System.err.println(String.format(
				"%s nimmt sich die Zutaten und hat jetzt [%s] [%s] [%s]",
				smoker, zutaten[0], zutaten[1], smoker.getImBesitz()));

		notifyAll();
		return zutaten;
	}

	


}
